home *** CD-ROM | disk | FTP | other *** search
/ Resource for Source: C/C++ / Resource for Source - C-C++.iso / misc_src / knowhow4 / prn_rec.cpp < prev    next >
C/C++ Source or Header  |  1995-11-01  |  2KB  |  82 lines

  1. #include "prn_rec.h"
  2. #include <alloc.h>
  3.  
  4. FIELD_LIST::FIELD_LIST()
  5.     {
  6.     total_fields = used_fields = 0;
  7.     field_list = NULL;
  8.     }
  9. /////////////////////////////
  10. FIELD_LIST::~FIELD_LIST()
  11.     {
  12.     for(int i = 0; i < used_fields; i++)
  13.     delete field_list[i];
  14.     delete field_list;
  15.     }
  16. ////////////////////////////
  17. void FIELD_LIST::add(FIELD_LAYOUT* field, int number)
  18.     {
  19.     used_fields++;
  20.     if(used_fields > total_fields)
  21.     field_list = (FIELD_LAYOUT**)realloc(field_list,
  22.        (total_fields += ALLOCATION_STEP) * sizeof(FIELD_LAYOUT*));
  23.     for(int i = used_fields; i > number; i--)
  24.     field_list[i] = field_list[i - 1];
  25.     field_list[number] = field;
  26.     }
  27. ////////////////////////////
  28. FIELD_LAYOUT* FIELD_LIST::remove_field(int number)
  29.     {
  30.     if(number > used_fields)
  31.     return 0;
  32.     FIELD_LAYOUT* temp = field_list[number];
  33.     for(int i = number; i < used_fields; i++)
  34.     field_list[i] = field_list[i + 1];
  35.     used_fields--;
  36.     if(total_fields - used_fields > 2 * ALLOCATION_STEP)
  37.     field_list = (FIELD_LAYOUT**)realloc(field_list,
  38.         (total_fields -= ALLOCATION_STEP) * sizeof(FIELD_LAYOUT*));
  39.     return temp;
  40.     }
  41. //////////////////////////////
  42. ADD_LIST::ADD_LIST()
  43.     {
  44.     total_add = used_add = 0;
  45.     add_list = NULL;
  46.     }
  47. /////////////////////////////
  48. ADD_LIST::~ADD_LIST()
  49.     {
  50.     for(int i = 0; i < used_add; i++)
  51.     delete add_list[i];
  52.     delete add_list;
  53.     }
  54. ////////////////////////////
  55. void ADD_LIST::add(ADDINFO_LAYOUT* add, int number)
  56.     {
  57.     used_add++;
  58.     if(used_add > total_add)
  59.     add_list = (ADDINFO_LAYOUT**)realloc(add_list,
  60.        (total_add += ALLOCATION_STEP) * sizeof(ADDINFO_LAYOUT*));
  61.     for(int i = used_add; i > number; i--)
  62.     add_list[i] = add_list[i - 1];
  63.     add_list[number] = add;
  64.     }
  65. /////////////////////////////
  66. ADDINFO_LAYOUT* ADD_LIST::remove_add(int number)
  67.     {
  68.     if(number > used_add)
  69.     return 0;
  70.     ADDINFO_LAYOUT* temp = add_list[number];
  71.     for(int i = number; i < used_add; i++)
  72.     add_list[i] = add_list[i + 1];
  73.     used_add--;
  74.     if(total_add - used_add > 2 * ALLOCATION_STEP)
  75.     add_list = (ADDINFO_LAYOUT**)realloc(add_list,
  76.         (total_add -= ALLOCATION_STEP) * sizeof(ADDINFO_LAYOUT*));
  77.     return temp;
  78.     }
  79. //////////////////////////////
  80. RECORD_LAYOUT::RECORD_LAYOUT() : FIELD_LIST(), ADD_LIST()
  81.     {
  82.     }